PKCS
개요
PKCS(Public-Key Cryptography Standards, 공개키 암호화 표준)는 공개키 기반 암호화 기술의 상호 운용성과 표준화를 목적으로 개발된 일련의 기술 표준 모음입니다. 이 표준들은 1990년대 초, RSA 랩스(RSA Laboratories)에서 주도하여 개발되었으며, 공개키 기반 인프라(PKI), 디지털 서명, 키 교환, 인증서 관리 등 다양한 암호학적 응용 분야에서 널리 사용됩니다. PKCS는 단일 표준이 아니라, 각각 특정 목적을 가진 여러 하위 표준들로 구성되어 있으며, 오늘날에도 SSL/TLS, 이메일 암호화(S/MIME), 전자서명 등 다양한 보안 프로토콜에서 핵심적인 역할을 하고 있습니다.
PKCS 표준은 개방적이며, 산업계와 학계에서 광범위하게 채택되어 국제 표준화 기구(예: IETF, ISO)의 표준 개발에도 큰 영향을 미쳤습니다.
주요 PKCS 표준
PKCS는 여러 개의 개별 표준으로 구성되어 있으며, 각각은 번호로 구분됩니다. 아래는 가장 널리 사용되는 주요 PKCS 표준들입니다.
PKCS #1: RSA 암호화 표준
PKCS #1은 RSA 공개키 암호 알고리즘의 구현과 사용을 위한 핵심 표준입니다. 이 표준은 다음과 같은 내용을 정의합니다:
- RSA 키 생성: 소수 선택, 모듈러스 및 지수 생성 절차
- 암호화 및 복호화: 공개키를 이용한 데이터 암호화, 개인키를 이용한 복호화
- 디지털 서명: RSASSA-PKCS1-v1_5 및 RSASSA-PSS와 같은 서명 스킴
- 패딩 방식: PKCS #1 v1.5 패딩과 더 안전한 PSS(Probabilistic Signature Scheme)
최신 버전은 RFC 8017로 IETF에서 관리되며, 보안 취약점을 방지하기 위해 PSS와 같은 현대적 패딩 방식의 사용을 권장합니다.
PKCS #3은 디피-헬만(Diffie-Hellman, DH) 키 교환 프로토콜의 구현을 위한 표준입니다. 이 표준은 두 통신 당사자가 안전한 채널 없이도 공유 비밀키를 생성할 수 있도록 하며, 주로 TLS와 같은 보안 프로토콜에서 사용됩니다.
- 주요 구성 요소: 소수 ( p ), 생성원 ( g ), 개인키 및 공개키 생성
- 주의점: 안전한 파라미터 선택이 중요하며, 약한 소수 사용은 공격에 취약
PKCS #5: 비밀번호 기반 키 도출 표준
PKCS #5는 사용자 비밀번호로부터 암호화 키를 도출하는 방법을 정의합니다. 가장 대표적인 알고리즘은 PBKDF2(Password-Based Key Derivation Function 2)입니다.
- 목적: 약한 비밀번호를 강력한 암호 키로 변환
- 작동 방식: 비밀번호, 솔트(salt), 반복 횟수(iteration count)를 입력으로 하여 키 생성
- 보안성: 반복 횟수를 높여 브루트포스 공격을 어렵게 함
현재는 RFC 2898로 표준화되어 있으며, 보안 시스템 및 암호화 저장소에서 널리 사용됩니다.
PKCS #7은 디지털 서명, 암호화, 인증서 첨부 등을 포함한 보안 메시지의 구조를 정의합니다. S/MIME 이메일 보안에서 핵심적으로 사용됩니다.
- 지원 기능:
- 서명된 데이터
- 암호화된 데이터
- 인증서 및 CRL 첨부
- 데이터 구조: ASN.1 기반 인코딩 사용
- 확장자:
.p7b, .p7c (인증서 묶음), .p7s (서명된 데이터)
PKCS #8은 개인키를 저장하고 교환하기 위한 표준 형식입니다. 일반적으로 PEM 또는 DER 인코딩으로 표현됩니다.
- 구조: 알고리즘 식별자와 키 데이터 포함
- 형식 예시:
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
- 암호화 가능: PKCS #8은 암호화된 개인키 저장도 지원 (PBKDF2 기반)
PKCS #10: 인증서 요청 표준
PKCS #10은 사용자가 인증 기관(CA)에 디지털 인증서를 요청할 때 사용하는 인증서 서명 요청(CSR, Certificate Signing Request)의 형식을 정의합니다.
- 포함 정보:
- 공개키
- 사용자 식별 정보 (Distinguished Name)
- 서명 (개인키로 생성)
- 확장자:
.csr
- 생성 도구: OpenSSL 등에서
req 명령어로 생성 가능
PKCS #12: 개인키 및 인증서 저장 형식
PKCS #12는 개인키와 관련 인증서를 하나의 파일로 패키징하여 저장하는 표준입니다. 주로 웹 브라우저나 애플리케이션에서 사용됩니다.
- 확장자:
.p12, .pfx
- 보안: 비밀번호 기반 암호화 지원
- 용도: 인증서 백업, 이동, 설치
예시 (OpenSSL 명령어):
openssl pkcs12 -export -in cert.pem -inkey key.pem -out bundle.p12
활용 사례
- 웹 보안: TLS/SSL 인증서 배포 및 관리 (PKCS #12, #10)
- 이메일 보안: S/MIME를 통한 서명 및 암호화 (PKCS #7)
- 키 관리: 암호화 키 저장 및 전송 (PKCS #8, #5)
- 인증서 기반 인증: PKI 환경에서의 신원 확인
참고 자료 및 관련 문서
관련 표준
- X.509: 디지털 인증서 형식 (PKCS #7, #12와 연동)
- ASN.1: 데이터 인코딩 구조 (PKCS 대부분에서 사용)
- CMS(Cryptographic Message Syntax): PKCS #7의 후속 표준 (RFC 5652)
PKCS는 현대 암호학 인프라의 기반이 되는 핵심 표준군으로, 보안 시스템 설계 시 반드시 이해해야 할 요소입니다.
# PKCS
## 개요
**PKCS**(Public-Key Cryptography Standards, 공개키 암호화 표준)는 공개키 기반 암호화 기술의 상호 운용성과 표준화를 목적으로 개발된 일련의 기술 표준 모음입니다. 이 표준들은 1990년대 초, RSA 랩스(RSA Laboratories)에서 주도하여 개발되었으며, 공개키 기반 인프라(PKI), 디지털 서명, 키 교환, 인증서 관리 등 다양한 암호학적 응용 분야에서 널리 사용됩니다. PKCS는 단일 표준이 아니라, 각각 특정 목적을 가진 여러 하위 표준들로 구성되어 있으며, 오늘날에도 SSL/TLS, 이메일 암호화(S/MIME), 전자서명 등 다양한 보안 프로토콜에서 핵심적인 역할을 하고 있습니다.
PKCS 표준은 개방적이며, 산업계와 학계에서 광범위하게 채택되어 국제 표준화 기구(예: IETF, ISO)의 표준 개발에도 큰 영향을 미쳤습니다.
---
## 주요 PKCS 표준
PKCS는 여러 개의 개별 표준으로 구성되어 있으며, 각각은 번호로 구분됩니다. 아래는 가장 널리 사용되는 주요 PKCS 표준들입니다.
### PKCS #1: RSA 암호화 표준
PKCS #1은 RSA 공개키 암호 알고리즘의 구현과 사용을 위한 핵심 표준입니다. 이 표준은 다음과 같은 내용을 정의합니다:
- **RSA 키 생성**: 소수 선택, 모듈러스 및 지수 생성 절차
- **암호화 및 복호화**: 공개키를 이용한 데이터 암호화, 개인키를 이용한 복호화
- **디지털 서명**: RSASSA-PKCS1-v1_5 및 RSASSA-PSS와 같은 서명 스킴
- **패딩 방식**: PKCS #1 v1.5 패딩과 더 안전한 PSS(Probabilistic Signature Scheme)
최신 버전은 **RFC 8017**로 IETF에서 관리되며, 보안 취약점을 방지하기 위해 PSS와 같은 현대적 패딩 방식의 사용을 권장합니다.
### PKCS #3: DH 키 협상 표준
PKCS #3은 **디피-헬만**(Diffie-Hellman, DH) 키 교환 프로토콜의 구현을 위한 표준입니다. 이 표준은 두 통신 당사자가 안전한 채널 없이도 공유 비밀키를 생성할 수 있도록 하며, 주로 TLS와 같은 보안 프로토콜에서 사용됩니다.
- 주요 구성 요소: 소수 \( p \), 생성원 \( g \), 개인키 및 공개키 생성
- 주의점: 안전한 파라미터 선택이 중요하며, 약한 소수 사용은 공격에 취약
### PKCS #5: 비밀번호 기반 키 도출 표준
PKCS #5는 사용자 비밀번호로부터 암호화 키를 도출하는 방법을 정의합니다. 가장 대표적인 알고리즘은 **PBKDF2**(Password-Based Key Derivation Function 2)입니다.
- **목적**: 약한 비밀번호를 강력한 암호 키로 변환
- **작동 방식**: 비밀번호, 솔트(salt), 반복 횟수(iteration count)를 입력으로 하여 키 생성
- **보안성**: 반복 횟수를 높여 브루트포스 공격을 어렵게 함
현재는 **RFC 2898**로 표준화되어 있으며, 보안 시스템 및 암호화 저장소에서 널리 사용됩니다.
### PKCS #7: 암호화 메시지 문법
PKCS #7은 디지털 서명, 암호화, 인증서 첨부 등을 포함한 보안 메시지의 구조를 정의합니다. S/MIME 이메일 보안에서 핵심적으로 사용됩니다.
- 지원 기능:
- 서명된 데이터
- 암호화된 데이터
- 인증서 및 CRL 첨부
- 데이터 구조: ASN.1 기반 인코딩 사용
- 확장자: `.p7b`, `.p7c` (인증서 묶음), `.p7s` (서명된 데이터)
### PKCS #8: 개인키 정보 구조
PKCS #8은 개인키를 저장하고 교환하기 위한 표준 형식입니다. 일반적으로 PEM 또는 DER 인코딩으로 표현됩니다.
- **구조**: 알고리즘 식별자와 키 데이터 포함
- **형식 예시**:
```pem
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
```
- **암호화 가능**: PKCS #8은 암호화된 개인키 저장도 지원 (PBKDF2 기반)
### PKCS #10: 인증서 요청 표준
PKCS #10은 사용자가 인증 기관(CA)에 디지털 인증서를 요청할 때 사용하는 **인증서 서명 요청**(CSR, Certificate Signing Request)의 형식을 정의합니다.
- 포함 정보:
- 공개키
- 사용자 식별 정보 (Distinguished Name)
- 서명 (개인키로 생성)
- 확장자: `.csr`
- 생성 도구: OpenSSL 등에서 `req` 명령어로 생성 가능
### PKCS #12: 개인키 및 인증서 저장 형식
PKCS #12는 개인키와 관련 인증서를 하나의 파일로 패키징하여 저장하는 표준입니다. 주로 웹 브라우저나 애플리케이션에서 사용됩니다.
- **확장자**: `.p12`, `.pfx`
- **보안**: 비밀번호 기반 암호화 지원
- **용도**: 인증서 백업, 이동, 설치
예시 (OpenSSL 명령어):
```bash
openssl pkcs12 -export -in cert.pem -inkey key.pem -out bundle.p12
```
---
## 활용 사례
- **웹 보안**: TLS/SSL 인증서 배포 및 관리 (PKCS #12, #10)
- **이메일 보안**: S/MIME를 통한 서명 및 암호화 (PKCS #7)
- **키 관리**: 암호화 키 저장 및 전송 (PKCS #8, #5)
- **인증서 기반 인증**: PKI 환경에서의 신원 확인
---
## 참고 자료 및 관련 문서
- [RFC 8017 - PKCS #1](https://tools.ietf.org/html/rfc8017)
- [RFC 2898 - PKCS #5](https://tools.ietf.org/html/rfc2898)
- [RFC 2986 - PKCS #10](https://tools.ietf.org/html/rfc2986)
- [IETF PKCS 페이지](https://datatracker.ietf.org/wg/pkix/)
---
## 관련 표준
- **X.509**: 디지털 인증서 형식 (PKCS #7, #12와 연동)
- **ASN.1**: 데이터 인코딩 구조 (PKCS 대부분에서 사용)
- **CMS**(Cryptographic Message Syntax): PKCS #7의 후속 표준 (RFC 5652)
PKCS는 현대 암호학 인프라의 기반이 되는 핵심 표준군으로, 보안 시스템 설계 시 반드시 이해해야 할 요소입니다.